package com.superman.supermarket.client.event;

import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.superman.supermarket.client.event.SkuPageEvent.SkuPageEventHandler;

/**
 * 商品详情页面事件定义
 * 
 * @author superman
 * @version 2018年7月12日下午4:21:31
 */
public class SkuPageEvent extends GwtEvent<SkuPageEventHandler> {

	/**
	 * 事件处理器
	 * 
	 * @author superman
	 * @version 2018年7月12日下午4:22:00
	 */
	public interface SkuPageEventHandler extends EventHandler {
		/**
		 * 收藏
		 * 
		 * @author superman
		 * @version 2018年8月8日 下午8:30:31
		 */
		void collect();

		/**
		 * 弹出添加到购物车
		 * 
		 * @author superman
		 * @version 2018年8月4日 下午8:43:56
		 */
		void showPopToAddCart();

		/**
		 * 弹出购买
		 * 
		 * @author superman
		 * @version 2018年8月4日 下午8:43:58
		 */
		void showPopToBuy();

		/**
		 * 取消收藏
		 * 
		 * @author superman
		 * @version 2018年8月8日 下午8:30:33
		 */
		void uncollect();
	}

	/**
	 * 页面事件类型定义
	 * 
	 * @author superman
	 * @version 2018年8月4日下午8:40:11
	 */
	public enum SkuPageEventType {
		COLLECT, // 点击加入购物车弹出框
		SHOW_POP_TO_ADDCART, // 点击购买弹出框
		SHOW_POP_TO_BUY, // 收藏
		UNCOLLECT// 取消收藏
	}

	public static final Type<SkuPageEventHandler> TYPE = new Type<SkuPageEventHandler>();

	private Object context;
	private SkuPageEventType eventType;

	/**
	 * 构造方法
	 * 
	 * @author superman
	 * @version 2018年8月4日 下午8:42:05
	 * @param eventType
	 */
	public SkuPageEvent(SkuPageEventType eventType) {
		this.eventType = eventType;
	}

	/**
	 * 构造方法
	 * 
	 * @author superman
	 * @version 2018年8月4日 下午8:42:08
	 * @param eventType
	 * @param context
	 */
	public SkuPageEvent(SkuPageEventType eventType, Object context) {
		this.eventType = eventType;
		this.context = context;
	}

	@Override
	protected void dispatch(SkuPageEventHandler handler) {
		switch (this.eventType) {
			case SHOW_POP_TO_ADDCART:
				handler.showPopToAddCart();
				break;
			case SHOW_POP_TO_BUY:
				handler.showPopToBuy();
				break;
			case COLLECT:
				handler.collect();
				break;
			case UNCOLLECT:
				handler.uncollect();
				break;
			default:
				break;
		}
	}

	@Override
	public Type<SkuPageEventHandler> getAssociatedType() {
		return TYPE;
	}

}
